import 'package:f_demo_one/components/child_comp.dart';
import 'package:flutter/material.dart';

class StatefulComp extends StatefulWidget {
  // 定义有状态组件的构造函数，接受一个 intro 参数
  const StatefulComp({super.key, required this.intro});

  // 定义属性，接受父组件的传值
  final String intro;

  // 组件开始创建调用，仅一次
  @override
  State<StatefulComp> createState() {
    print('父组件---createState');
    return _StatefulCompState();
  }
}

class _StatefulCompState extends State<StatefulComp> {
  // 组件初始化调用，仅一次
  @override
  void initState() {
    print('父组件---initState');
    super.initState();
  }

  // 组件依赖项发生变化时调用，可能会调用多次
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print('父组件---didChangeDependencies');
  }

  // 定义一个变量来存储当前计数
  int _count = 0;

  @override
  Widget build(BuildContext context) {
    print('父组件---build');
    return Column(
      children: [
        Text('这是一个有状态组件,${widget.intro}'),
        const SizedBox(height: 10),
        Row(
          children: [
            // 减号按钮
            ElevatedButton(
                onPressed: () {
                  // setState() 方法用于更新组件的状态，
                  // 当调用 setState() 方法时，Flutter 会重新调用 build() 方法来构建组件树，并将新的状态渲染到屏幕上。
                  setState(() {
                    _count--;
                  });
                },
                child: const Text('-')),
            const SizedBox(width: 10),

            // 显示当前计数
            Text('$_count'),

            const SizedBox(width: 10),
            // 加号按钮
            ElevatedButton(
                onPressed: () {
                  setState(() {
                    _count++;
                  });
                },
                child: const Text('+')),
          ],
        ),
        const SizedBox(height: 10),
        ChildComp(
          count: _count,
          updateCount: (int value) {
            setState(() {
              _count = value;
            });
          },
        ),
      ],
    );
  }

  @override
  void didUpdateWidget(StatefulComp oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('父组件---didUpdateWidget');
  }

  @override
  void deactivate() {
    print('父组件---deactivate');
    super.deactivate();
  }

  @override
  void dispose() {
    print('父组件---dispose');
    super.dispose();
  }
}
